const install = function(){
    /**
     * 解决四舍五入不准确的问题
     * https://zhuanlan.zhihu.com/p/31202697
     */
    if (!Number.prototype._toFixed) {
        Number.prototype._toFixed = Number.prototype.toFixed;
    }
    Number.prototype.toFixed = function(n) {
        return (this + 3e-16)._toFixed(n);
    };
    
    /**
     * finally
     * promise.then或promise.catch执行后立即执行
     * @param {Object} callback
     */
    Promise.prototype.finally = function (callback) {
        let P = this.constructor;
        return this.then(
          value  => P.resolve(callback()).then(() => value),
          reason => P.resolve(callback()).then(() => { throw reason })
        );
    }
    
    
    /**
     * 日期格式转换
     * @param {String} fmt 转换格式yyyy=年,MM=月,dd=日,EE=周(EEE=星期),HH=24h,hh=12h
     * @example new Date().format('yyyy年MM月dd日 EE HH:mm:ss');
     */
    Date.prototype.format = function(fmt) {
    	var o = {
    		"M+": this.getMonth() + 1, //月份         
    		"d+": this.getDate(), //日         
    		"h+": this.getHours() % 12 == 0 ? 12 : this.getHours() % 12, //小时         
    		"H+": this.getHours(), //小时         
    		"m+": this.getMinutes(), //分         
    		"s+": this.getSeconds(), //秒         
    		"q+": Math.floor((this.getMonth() + 3) / 3), //季度         
    		"S": this.getMilliseconds() //毫秒         
    	};
    	var week = {
    		"0": "\u65e5",
    		"1": "\u4e00",
    		"2": "\u4e8c",
    		"3": "\u4e09",
    		"4": "\u56db",
    		"5": "\u4e94",
    		"6": "\u516d"
    	};
    	if(/(y+)/.test(fmt)) {
    		fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    	}
    	if(/(E+)/.test(fmt)) {
    		fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[this.getDay() + ""]);
    	}
    	for(var k in o) {
    		if(new RegExp("(" + k + ")").test(fmt)) {
    			fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    		}
    	}
    	return fmt;
    }
    
    // #ifndef APP-NVUE
    /**
     * File对象兼容
     */
    // try {
    //     new File([], '')
    // } catch(e) {
    //     class File extends Blob {
    //         constructor(chunks, filename, opts = {}){
    //             super(chunks, opts)
    //             this.lastModifiedDate = new Date()
    //             this.lastModified =+ this.lastModifiedDate
    //             this.name = filename
    //         }
    //     }
    // }
    // #endif
    
}

export default {
    install
}